/***************************************************************************
 创建者：          hualei
 开始时间：      2018.09.10
 copyright:(C)    深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   MODBUS_WRITE 总线指令属性编辑视窗
 *
 ***************************************************************************/
#ifndef MODBUSWRITEINSTRUCTIONVIEW_H
#define MODBUSWRITEINSTRUCTIONVIEW_H

#include <QWidget>
#include "modbuswriteinstructionview_global.h"
#include <QTranslator>

class ProgramView;

namespace Ui {
class ModbusWriteInstructionView;
}

/**
 * @brief The EM_MODBUS_WRITE_TYPE enum     Modbus总线类型
 */
enum EM_MODBUS_WRITE_TYPE
{
    E_MODBUS_WRITE_TYPE_INTERNET_MASTER,    // Modbus-TCP-主设备类型
    E_MODBUS_WRITE_TYPE_INTERNET_SLAVE,     // Modbus-TCP-从设备类型
    E_MODBUS_WRITE_TYPE_RS485_MASTER,       // Modbus-RS485-主设备类型
    E_MODBUS_WRITE_TYPE_RS485_SLAVE,        // Modbus-RS485-从设备类型
    E_MODBUS_WRITE_TYPE_ERROR               // 错误

};

/**
 * @brief The EM_SELECTION_CONDITION enum   总线类型参数选择
 */
enum EM_SELECTION_CONDITION
{
    E_SELECTION_INTERNET,       // Modbus-TCP
    E_SELECTION_RS485,          // Modbus-RS485
    E_SELECTION_MASTER,         // 主设备
    E_SELECTION_SLAVE,          // 从设备
    E_SELECTION_CONST,          // 写常量数据
    E_SELECTION_NO_CONST        // 写寄存器数据

};

/**
 * @brief The ModbusWriteInstructionView class      MODBUS_WRITE 总线指令属性编辑视窗类
 */
class MODBUSWRITEINSTRUCTIONVIEWSHARE_EXPORT ModbusWriteInstructionView : public QWidget
{
    Q_OBJECT

public:
    explicit ModbusWriteInstructionView(int styleId,QWidget *parent = 0);

    /**
     * @brief getInput          获取界面输入内容
     */
    void getInput();

    /**
     * @brief updateView        更新内容到界面
     */
    void updateView();

    /**
     * @brief changeLanguage    更改语言
     * @param language
     */
    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);


private slots:

//    /**
//     * @brief on_INTERNET_radioButton_clicked           选择　INTERNET　总线类型槽函数
//     */
//    void on_INTERNET_radioButton_clicked();

//    /**
//     * @brief on_RS485_radioButton_clicked              选择 RS485 总线类型槽函数
//     */
//    void on_RS485_radioButton_clicked();

//    /**
//     * @brief on_MASTER_radioButton_clicked             选择　MASTER 主从模式槽函数
//     */
//    void on_MASTER_radioButton_clicked();

//    /**
//     * @brief on_SLAVE_radioButton_clicked              选择　SLAVE 主从模式槽函数
//     */
//    void on_SLAVE_radioButton_clicked();

    /**
     * @brief on_CONST_radioButton_clicked              选择常量值写入寄存器
     */
    void on_CONST_radioButton_clicked();

    /**
     * @brief on_NoConst_radioButton_clicked            选择非常量值写入寄存器
     */
    void on_NoConst_radioButton_clicked();

    /**
     * @brief on_clearNote_Btn_clicked                  清除注释
     */
    void on_clearNote_Btn_clicked();

    /**
     * @brief on_forward_Btn_clicked                    上一页槽函数
     */
    void on_forward_Btn_clicked();

    /**
     * @brief on_save_Btn_clicked                       保存指令
     */
    void on_save_Btn_clicked();

signals:
//    /**
//     * @brief selection_INTERNET_Signal     选择　INTERNET 总线类型信号
//     */
//    void selection_INTERNET_Signal();

//    /**
//     * @brief selection_RS485_Signal        选择 RS485 总线类型信号
//     */
//    void selection_RS485_Signal();

//    /**
//     * @brief selection_MASTER_Signal       选择　MASTER 主从模式信号
//     */
//    void selection_MASTER_Signal();

//    /**
//     * @brief selection_SLAVE_Signal        选择　SLAVE　主从模式信号
//     */
//    void selection_SLAVE_Signal();

//    /**
//     * @brief selection_CONST_Signal        选择常量值写入寄存器信号
//     */
//    void selection_CONST_Signal();

//    /**
//     * @brief selection_NoConst_Signal      选择非常量值写入寄存器信号
//     */
//    void selection_NoConst_Signal();

    /**
     * @brief cleanNoteSignal               清除注释
     */
    void cleanNoteSignal();

    /**
     * @brief finishEditInstruction         完成指令属性编辑
     */
    void finishEditInstruction();

    /**
     * @brief saveInstruction               保存指令
     * @param instruction
     */
    void saveInstruction(QString instruction);

private:

    QTranslator translator;

public:
    /**
     * @brief programView           主程序视图
     */
    ProgramView *programView;

    QString instruction;

    int writeConstValue;

    int writeValue;

    QString modbusID;

    EM_MODBUS_WRITE_TYPE modbusWriteType;

    int writeRegAddress;

    QString JMP_LB_Value;

    QString noteStr;

    EM_SELECTION_CONDITION selectionModbusType;

    EM_SELECTION_CONDITION selectionModbusMode;

    EM_SELECTION_CONDITION selectionWriteValueType;

private:
    Ui::ModbusWriteInstructionView *ui;
};

#endif // MODBUSWRITEINSTRUCTIONVIEW_H
